import cv2
import os.path as op
import os


# 该函数作用为将视频中的图片按照设定好的抽帧间隔，提取并保存视频图片  参数time代表间隔多少帧提取一张图片
def split_video(video_path, out_path, time):
    if not op.exists(out_path):  # 如果输出路径文件夹不存在
        os.mkdir(out_path)  # 创建目录
    vc = cv2.VideoCapture(video_path)  # 实例化cv2.VideoCapture()函数

    success, frame = vc.read()  # success代表读取是否成功，frame代表当前读取的帧
    i = 0  # i代表的是取的第几帧的图片
    i_out = 0  # i_out 代表的是输出的第几张图片
    while success:
        i += 1
        img_path = f'{out_path}\\{i_out}.jpg'

        if not i % time:  # 使用这个if判断每隔几帧图像提取保存一张
            cv2.imwrite(img_path, frame)
            i_out += 1

        if success:
            success, frame = vc.read()

    t = i/vc.get(cv2.CAP_PROP_FPS)  # 视频总时长
    print('视频中图像的宽度为：{}'.format(vc.get(cv2.CAP_PROP_FRAME_WIDTH)))
    print('视频中图像的高度为：{}'.format(vc.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    print('视频帧率为：{}'.format(vc.get(cv2.CAP_PROP_FPS)))
    print('视频总帧数为：{}'.format(vc.get(cv2.CAP_PROP_FRAME_COUNT)))
    print(f'\n视频总时长为：{t}秒', end='')
    print(f'\n提取保存了{i_out}张视频图像', end='')
    print(f'\n检阅了{i}帧视频图像', end='')



